#include <iostream>
#include <signal.h>
#include <unistd.h>
using namespace std;
void PrintSig(sigset_t& pending)
{
    for(int signo = 31;signo>=1;signo--)
    {
        if(sigismember(&pending,signo)){
            cout<<"1";
        }else{
            cout<<"0";
        }
    }
    cout<<endl;
}

void handler(int signo)
{
    cout << "signo:" << signo << endl;
    
    // 不断的获取pending
    sigset_t pending;
    sigemptyset(&pending);

    while (true)
    {
        sleep(1);
        sigpending(&pending);
        PrintSig(pending);
    }
}
int main()
{
    struct sigaction act, oact;
    act.sa_handler = handler;
    act.sa_flags = 0;          // 处理的是普通信号,就设置为0即可.
    sigemptyset(&act.sa_mask); // 清空信号集
    sigaddset(&act.sa_mask, 3); // 添加信号集
    sigaddset(&act.sa_mask, 4); // 添加信号集
    sigaddset(&act.sa_mask, 5); // 添加信号集
    sigaction(2, &act, &oact);
    while (true)
        sleep(1); 
    return 0;
}